import {
    TEXT,
    ITypeEnums
} from './type';

const textOption = [{
        label: '等于',
        value: TEXT.EQUAL,
        viewType: "select"
    },
    {
        label: '不等于',
        value: TEXT.VARY,
        viewType: "select"
    },
    {
        label: '开头是',
        value: TEXT.STARTS_WITH,
        viewType: "input"
    },
    {
        label: '开头不是',
        value: TEXT.NOT_BEGINNING,
        viewType: "input"
    },
    {
        label: '结尾是',
        value: TEXT.END_WITH,
        viewType: "input"
    },
    {
        label: '结尾不是',
        value: TEXT.END_NOT,
        viewType: "input"
    },
    {
        label: '包含',
        value: TEXT.CONTAIN,
        viewType: "input"
    },
    {
        label: '不包含',
        value: TEXT.EXCLUDE,
        viewType: "input"
    },
]

const NumberOption = [{
        label: '等于',
        value: TEXT.EQUAL,
        viewType: "select"
    },
    {
        label: '不等于',
        value: TEXT.VARY,
        viewType: "select"
    },
    {
        label: '大于',
        value: TEXT.Greater_THEN,
        viewType: "input"
    },
    {
        label: '大于或等于',
        value: TEXT.Greater_EQUAL,
        viewType: "input"
    },
    {
        label: '小于',
        value: TEXT.LESS_THEN,
        viewType: "input"
    },
    {
        label: '小于或等于',
        value: TEXT.LESS_EQUAL,
        viewType: "input"
    },
    {
        label: '开头是',
        value: TEXT.STARTS_WITH,
        viewType: "input"
    },
    {
        label: '开头不是',
        value: TEXT.NOT_BEGINNING,
        viewType: "input"
    },
    {
        label: '结尾是',
        value: TEXT.END_WITH,
        viewType: "input"
    },
    {
        label: '结尾不是',
        value: TEXT.END_NOT,
        viewType: "input"
    },
    {
        label: '包含',
        value: TEXT.CONTAIN,
        viewType: "input"
    },
    {
        label: '不包含',
        value: TEXT.EXCLUDE,
        viewType: "input"
    },
]

const timeOption = [{
        label: '等于',
        value: TEXT.EQUAL,
        viewType: "select"
    },
    {
        label: '不等于',
        value: TEXT.VARY,
        viewType: "select"
    },
    {
        label: '大于',
        value: TEXT.Greater_THEN,
        viewType: "input"
    },
    {
        label: '大于或等于',
        value: TEXT.Greater_EQUAL,
        viewType: "input"
    },
    {
        label: '小于',
        value: TEXT.LESS_THEN,
        viewType: "input"
    },
    {
        label: '小于或等于',
        value: TEXT.LESS_EQUAL,
        viewType: "input"
    },
]

const equalVal = (tableVale, inputValue) => tableVale === inputValue;
const varyVal = (tableVale, inputValue) => tableVale !== inputValue;

const startsWithVal = (tableVale, inputValue) => tableVale.startsWith(inputValue);
const notBeginningVal = (tableVale, inputValue) => !tableVale.startsWith(inputValue);

const endWithVal = (tableVale, inputValue) => tableVale.endsWith(inputValue);
const endNotVal = (tableVale, inputValue) => !tableVale.endsWith(inputValue);

const containVal = (tableVale, inputValue) => tableVale.includes(inputValue);
const excludeVal = (tableVale, inputValue) => tableVale.includes(inputValue);

const GreaterVal = (tableVale, inputValue) => tableVale > inputValue;
const GreaterEqualVal = (tableVale, inputValue) => tableVale >= inputValue;

const lessThenVal = (tableVale, inputValue) => tableVale < inputValue;
const lessEqualVal = (tableVale, inputValue) => tableVale <= inputValue;


const commonResultMap = (tableVale, inputValue) => ({
    // [TEXT.EQUAL]: equalVal(tableVale, inputValue),
    // [TEXT.VARY]: varyVal(tableVale, inputValue),

    // [TEXT.STARTS_WITH]: startsWithVal(tableVale, inputValue),
    // [TEXT.STARTS_WITH]: notBeginningVal(tableVale, inputValue),

    // [TEXT.END_WITH]: endWithVal(tableVale, inputValue),
    // [TEXT.END_NOT]: endNotVal(tableVale, inputValue),

    // [TEXT.CONTAIN]: containVal(tableVale, inputValue),
    // [TEXT.EXCLUDE]: excludeVal(tableVale, inputValue),
    equal: equalVal(tableVale, inputValue),
    vary: varyVal(tableVale, inputValue),

    startsWith: startsWithVal(tableVale, inputValue),
    notBeginning: notBeginningVal(tableVale, inputValue),

    endWith: endWithVal(tableVale, inputValue),
    endNot: endNotVal(tableVale, inputValue),

    contain: containVal(tableVale, inputValue),
    exclude: excludeVal(tableVale, inputValue),
})



export const getTextResultMap = (tableVale, symbol, inputValue) => {
    // console.log(tableVale, symbol, inputValue, 111); //上海市1517弄 equal 12 111
    const map = {
        ...commonResultMap(tableVale, inputValue),
    }
    // console.log(map[symbol], 222);
    return map[symbol];
}
export const getNumberResultMap = (tableVale, symbol, inputValue) => {
    const map = {
        ...commonResultMap(tableVale, inputValue),
        // [TEXT.Greater_THEN]: GreaterVal(tableVale, inputValue),
        // [TEXT.Greater_EQUAL]: GreaterEqualVal(tableVale, inputValue),
        // [TEXT.LESS_THEN]: lessThenVal(tableVale, inputValue),
        // [TEXT.LESS_EQUAL]: lessEqualVal(tableVale, inputValue),
        greaterThan: GreaterVal(tableVale, inputValue),
        greaterEqual: GreaterEqualVal(tableVale, inputValue),
        lessThan: lessThenVal(tableVale, inputValue),
        lessEqual: lessEqualVal(tableVale, inputValue),
    }

    return map[symbol];
}
// time
export const getTimeResultMap = (tableVale, symbol, inputValue) => {
    // console.log(tableVale, symbol, inputValue, 222); 
    const map = {
        equal: equalVal(tableVale, inputValue),
        vary: varyVal(tableVale, inputValue),
        greaterThan: GreaterVal(tableVale, inputValue),
        greaterEqual: GreaterEqualVal(tableVale, inputValue),
        lessThan: lessThenVal(tableVale, inputValue),
        lessEqual: lessEqualVal(tableVale, inputValue),
    }

    return map[symbol];
}


// 这里获取的是 运算符根据type 去 获取   文本、数字、时间.....
export const getOperator = (type) => {
    console.log("type", type);
    const Map = {
        [ITypeEnums.textType]: textOption,
        [ITypeEnums.numberType]: NumberOption,
        [ITypeEnums.timeType]: timeOption,
    }
    return Map[type] ?? [];
}